using System.Collections.Generic;
using Sixeyed.CodeGeneration.Metadata.Enums;

namespace Sixeyed.CodeGeneration.Metadata.Interfaces
{
    /// <summary>
    /// Represents a provider of metadata items
    /// </summary>
    public interface IMetadataProvider
    {
        /// <summary>
        /// Provider name
        /// </summary>
        string Name { get;}

        /// <summary>
        /// Provider description
        /// </summary>
        string Description { get;}

        /// <summary>
        /// Name of the metadata item type of the provider
        /// </summary>
        string ItemTypeName { get;}

        /// <summary>
        /// Name of the metadata source type used by the provider
        /// </summary>
        string SourceTypeName { get; }

        /// <summary>
        /// Name of the metadata source used by the provider
        /// </summary>
        string SourceName { get; }

        /// <summary>
        /// Metadata source for the provider
        /// </summary>
        IMetadataSource Source { get; set;}

        /// <summary>
        /// Selection type for metadata items
        /// </summary>
        ProviderSelectionType SelectionType { get; }

        /// <summary>
        /// Returns a list of available metadata items
        /// </summary>
        /// <returns>Item name list</returns>
        List<string> GetItemNames();

        /// <summary>
        /// Returns a single metadata item
        /// </summary>
        /// <param name="itemKey">Item identifier</param>
        /// <returns>Populated metadata item</returns>
        IMetadataItem GetItem(string itemKey);
    }
}
